package com.fadada.api;


import com.fasc.open.api.bean.base.BaseRes;
import com.fasc.open.api.bean.common.OpenId;
import com.fasc.open.api.bean.req.file.UploadInstantReq;
import com.fasc.open.api.bean.res.file.UploadInstantRes;
import com.fasc.open.api.client.FileClient;
import com.fasc.open.api.enums.common.IdTypeEnum;
import com.fasc.open.api.enums.signtask.FileTypeEnum;
import com.fasc.open.api.exception.ApiException;
import com.fasc.open.api.utils.ResultUtil;

import java.io.File;

/**
 * @author FDD
 * @version 0.0.1
 * @ClassName FileDemo.java
 * @Description 文档管理接口使用demo
 * @Param
 * @createTime 2021/10/22 15:06
 */
public class FileDemo extends BaseDemo {
    private static FileClient fileClient;

    public static void main(String[] args) {
        try {
            BaseDemo baseDemo = new BaseDemo();
            openApiClient = baseDemo.getClient();
            fileClient = new FileClient(openApiClient);
            //获取应用accessToken
            accessToken = baseDemo.getAccessToken(openApiClient);
            //上传即时文件
            fileUploadInstant();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 上传即时文件
     *
     * **接口说明：**将待签署的文档文件或附件上传到法大大平台。法大大平台为每个成功上传的文件分配一个唯一的标识fileId。
     * 文件源数据要么通过文件流形式直接传送，要么提供fileUrl，法大大平台将从该fileUrl拉取文档文件。
     * 即：fileContent和fileUrl必须有一个参数是有效的。
     *
     * **适用场景：**创建签署任务前上传文档和附件。
     *
     * **注意：**
     *
     * 文档文件目前支持doc、docx、wps、pdf、xls、xlsx格式。文档上传后，将被自动转换成PDF格式。
     *
     * 附件文件目前支持 doc、docx、wps、jpg、jpeg、png、pdf、xls、xlsx、zip、rar、mp4、amr、mp3、wav 格式，且不会自动转换成PDF格式。
     *
     * **授权要求：**应用系统需提前获得文件归属方的授权才可以调用。收到该接口调用后，法大大平台将检查授权信息和授权范围，如果该签署任务的文件归属方未授权，则将返回失败。因此您要在要求文件归属方的要求其授权。参考[获取个人用户授权链接](#获取个人用户授权链接)、[获取企业用户授权链接](#获取企业用户授权链接)。
     */
    public static void fileUploadInstant() throws ApiException{

        UploadInstantReq uploadInstantReq = new UploadInstantReq();
        uploadInstantReq.setAccessToken(accessToken);
        //文件归属方，指定该文件属于谁。
        uploadInstantReq.setOwnerId(OpenId.getInstance(IdTypeEnum.CORP.getCode(),null,openCorpId));
        //文件的用途类型：doc：用于签署的文档，只有这种用途的文件才可以被加入签署任务的文档列表中
        //attach：用于签署文档的附件，只有这种用途的文件才可以被加入签署任务的附件列表中
        uploadInstantReq.setFileType(FileTypeEnum.DOC.getCode());
        //文档名称，长度最大100个字符。
        uploadInstantReq.setFileName("文件名称");
        //文件源URL地址，法大大平台将从该地址拉取文档，文档大小暂定不能超过**50M**。如fileContent为空，此处必填。长度最大为500个字符。
        uploadInstantReq.setFileUrl("网络文件地址");
        //可在此设置上传文件的hash值(sha256)， 输出hexString；如有传入该参数，上传后会校验文件hash值是否匹配：如匹配则上传成功，如不匹配则上传失败。
        //请注意：计算文件hash会消耗法大大平台系统资源和增加一定的响应时间。如果您期望更好快的响应时间和用户体验，请不要传该参数。
        uploadInstantReq.setFileContentHash("");
        //文件流，file类型，文档大小暂定不能超过**50M**。如fileUrl为空，此处必填。**该参数不参与接口参数签名计算**。
        String path = "本地文件地址";
        File file = new File(path);
        BaseRes<UploadInstantRes> res = fileClient.uploadInstantFile(file, uploadInstantReq);
        ResultUtil.printLog(res, openApiClient.getJsonStrategy());

    }

}
